﻿namespace AlgoHero.Modelo
{
    using System;

    public class Cronometro
    {
        private DateTime tiempoDeInicio;
        private bool estaPrendido;
        private TimeSpan tiempoPausado;
        private bool estaPausado;

        public Cronometro()
        {
            this.estaPrendido = false;
            this.tiempoPausado = new TimeSpan();
        }

        public void Comenzar()
        {
            this.estaPrendido = true;
            this.tiempoDeInicio = DateTime.Now;
        }

        public void Reset()
        {
            this.estaPrendido = false;
            this.tiempoPausado = new TimeSpan();
        }

        public double TiempoElapsado()
        {
            if (!this.estaPrendido) return 0;
            if (this.estaPausado) return this.tiempoPausado.TotalSeconds;
            return this.Intervalo().TotalSeconds + tiempoPausado.TotalSeconds;
        }

        private TimeSpan Intervalo()
        {
            return DateTime.Now - this.tiempoDeInicio;
        }

        public void Pausar()
        {
            if (this.estaPrendido)
            {
                this.tiempoPausado = this.Intervalo() + this.tiempoPausado;
                this.estaPausado = true;
            }
        }

        public void Reanudar()
        {
            if (this.estaPrendido)
            {
                this.tiempoDeInicio = DateTime.Now;
                this.estaPausado = false;
            }
        }
    }
}
